Ext.onReady(function ()
{
	function getChecked(id)
	{
		Ext.Ajax.request(
		{
			url : basePath + 'user/GetRMChecked?rid=' + id,
			method : 'POST',
			success : function (response)
			{
				var json = Ext.JSON.decode(response.responseText);
				moduleGrid.getSelectionModel().deselectAll();
				for (x in json)
				{
					var index = moduleData.find('module_id', json[x].mid);
					moduleGrid.getSelectionModel().select(index, true, false);
				}
			}
		}
		)
	}

	function editForm()
	{
		if (editRoleForm.getForm().isValid())
		{
			editRoleForm.getForm().submit(
			{
				url : basePath + 'user/editRole',
				method : 'POST',
				waitMsg : '正在修改，请稍候...',
				waitTitle : '修改中',
				timeout : 300000,
				params : editRoleForm.getValues(),
				success : function (editRoleForm, action)
				{
					var isSuc = action.result.success;
					if (isSuc)
					{
						var index = RoleData.find('role_id', RoleNameBox.getValue());
						var Roleid = RoleData.getAt(index).get('role_id');
						var record = moduleGrid.getSelectionModel();
						for (var i = 0; i < moduleGrid.getStore().getTotalCount(); i++)
						{
							var urlString = "";
							if (record.isSelected(i))
							{
								urlString = basePath + 'user/setRoleModule?rid=' + Roleid + '&mid=' + moduleGrid.getStore().getAt(i).get('module_id') + '&status=true';
							}
							else
							{
								urlString = basePath + 'user/setRoleModule?rid=' + Roleid + '&mid=' + moduleGrid.getStore().getAt(i).get('module_id') + '&status=false';
							}
							Ext.Ajax.request(
							{
								url : urlString
							}
							);
						}
						Ext.Msg.alert('修改成功！', '已经成功修改，相应权限分配将在下次登录时启用！');
						RoleGrid.store.removeAll();
						RoleGrid.store.reload();
						editWindow.close();
					}
					else
					{
						var res = action.result.res;
						Ext.Msg.alert('修改失败', res);
					}
				},
				failure : function (addCourseForm, action)
				{
					var res = action.result.res;
					Ext.Msg.alert('修改失败', res);
				}
			}
			);
		}
	}

	function addForm()
	{
		if (addNewRoleForm.getForm().isValid())
		{
			addNewRoleForm.getForm().submit(
			{
				url : basePath + 'user/addRole',
				method : 'POST',
				waitMsg : '正在添加，请稍候...',
				waitTitle : '添加中',
				timeout : 300000,
				params : addNewRoleForm.getValues(),
				success : function (addNewRoleForm, action)
				{
					var isSuc = action.result.success;
					if (isSuc)
					{
						
						var Roleid = action.result.res;
						var record = newModuleGrid.getSelectionModel();
						for (var i = 0; i < newModuleGrid.getStore().getTotalCount(); i++)
						{
							var urlString = "";
							if (record.isSelected(i))
							{
								urlString = basePath + 'user/setRoleModule?rid=' + Roleid + '&mid=' + newModuleGrid.getStore().getAt(i).get('module_id') + '&status=true';
							}
							else
							{
								urlString = basePath + 'user/setRoleModule?rid=' + Roleid + '&mid=' + newModuleGrid.getStore().getAt(i).get('module_id') + '&status=false';
							}
							Ext.Ajax.request(
							{
								url : urlString
							}
							);
						}
						Ext.Msg.alert('添加成功！', '已经完成添加！');
						RoleGrid.store.removeAll();
						RoleGrid.store.reload();
						addWindow.close();
					}
					else
					{
						var res = action.result.res;
						Ext.Msg.alert('添加失败', res);
					}
				},
				failure : function (addNewRoleForm, action)
				{
					var res = action.result.res;
					Ext.Msg.alert('添加失败', res);
				}
			}
			);
		}
	}

	function deleteForm(Button)
	{
		if (Button != 'yes')
			return;
		editRoleForm.getForm().submit(
		{
			url : basePath + 'user/deleteRole',
			method : 'POST',
			waitMsg : '正在删除，请稍候...',
			waitTitle : '删除中',
			timeout : 300000,
			params : editRoleForm.getValues(),
			success : function (editRoleForm, action)
			{
				var isSuc = action.result.success;
				if (isSuc)
				{
					Ext.Msg.alert('删除成功！', '已经成功删除！');
					RoleGrid.store.removeAll();
					RoleGrid.store.reload();
					editWindow.close();
				}
				else
				{
					var res = action.result.res;
					Ext.Msg.alert('删除失败', res);
				}
			},
			failure : function (addCourseForm, action)
			{
				var res = action.result.res;
				Ext.Msg.alert('删除失败', res);
			}
		}
		);
	}

	//获得数据store
	var RoleData = Ext.create('Ext.data.Store',
		{
			model : 'RoleModel',
			proxy :
			{
				type : 'ajax',
				url : basePath + 'user/getRoleList',
				reader :
				{
					type : 'json',
					root : 'root'
				}
			},
			autoLoad : true
		}
		);

	//数据填充入combobox
	var RoleNameBox = Ext.create('Ext.form.ComboBox',
		{
			fieldLabel : '角色:',
			emptyText : '请选择要修改的角色',
			labelWidth : 100,
			width : 400,
			labelAlign : "right",
			store : RoleData,
			queryMode : 'local',
			editable : false,
			name : 'role_id',
			hiddenName : 'role_id',
			displayField : 'name',
			valueField : 'role_id',
			blankText : '不能为空',
			allowBlank : false,
			listeners :
			{
				'select' : function ()
				{
					var index = RoleData.find('role_id', RoleNameBox.getValue());
					getChecked(RoleData.getAt(index).get('role_id'));
				}
			}
		}
		);

	var RoleColumns = [
		{
			header : '角色名称',
			dataIndex : 'name',
			width : '100%'
		},
	];

	Ext.QuickTips.init();

	var RoleGrid = new Ext.grid.GridPanel(
		{
			title : '查看角色列表',
			frame : false,
			selModel : new Ext.selection.RowModel(),
			store : RoleData,
			enableHdMenu : false,
			enableColumnHide : false,
			columnLines : true,
			columns : RoleColumns,
			stripeRows : true,
			loadMask : true,
			renderTo : 'showRoleDiv',
			listeners :
			{
				'select' : function (selModel, record, index, eOpts)
				{
					selRecord = record;
				}
			},
			buttons : [
				{
					text : '新增',
					handler : function ()
					{
						addWindow.show();
					}
				},
				{
					text : '编辑',
					handler : function ()
					{
						editWindow.show();
						RoleNameBox.select(selRecord);
						getChecked(selRecord.get('role_id'));
					}
				}
			]
		}
		);

	var roleData = Ext.create('Ext.data.Store',
		{
			model : 'RoleModel',
			proxy :
			{
				type : 'ajax',
				url : basePath + 'user/getRoleList',
				reader :
				{
					type : 'json',
					root : 'root'
				}
			},
			autoLoad : true
		}
		);

	var roleComboBox = Ext.create('Ext.form.ComboBox',
		{
			fieldLabel : '角色:',
			emptyText : '请选择角色',
			labelWidth : 100,
			width : 400,
			labelAlign : "right",
			store : roleData,
			queryMode : 'local',
			editable : false,
			name : 'role_id',
			hiddenName : 'role_id',
			displayField : 'name',
			valueField : 'role_id',
			allowBlank : true
		}
		);

	var moduleData = Ext.create('Ext.data.Store',
		{
			model : 'ModuleModel',
			proxy :
			{
				type : 'ajax',
				url : basePath + 'lab/getModuleList',
				reader :
				{
					type : 'json',
					root : 'root'
				}
			},
			autoLoad : true
		}
		);
	//表格头部
	var columns = [
		{
			header : '模块名称',
			dataIndex : 'name',
			width : '40%'
		},
		{
			header : '模块描述',
			dataIndex : 'description',
			width : '60%'
		}
	];

	var moduleGrid = new Ext.grid.GridPanel(
		{
			title : '角色可用模块:',
			frame : false,
			selModel : new Ext.selection.CheckboxModel(
			{
				checkOnly : true
			}
			),
			store : moduleData,
			enableHdMenu : false,
			enableColumnHide : false,
			columnLines : true,
			columns : columns,
			stripeRows : true,
			loadMask : true
		}
		);
		
	var newModuleGrid = new Ext.grid.GridPanel(
		{
			title : '角色可用模块:',
			frame : false,
			selModel : new Ext.selection.CheckboxModel(
			{
				checkOnly : true
			}
			),
			store : moduleData,
			enableHdMenu : false,
			enableColumnHide : false,
			columnLines : true,
			columns : columns,
			stripeRows : true,
			loadMask : true
		}
		);

	var tmp = Ext.getCmp('editRoleForm');
	if (tmp != null)
		tmp.destroy();
	var editRoleForm = Ext.create("Ext.form.FormPanel",
		{
			title : '修改角色信息',
			frame : false,
			defaultType : 'textfield',
			defaults :
			{
				anchor : '100%',
				labelWidth : 100,
				labelAlign : "right"
			},
			items : [
				RoleNameBox,
				{
					allowBlank : true,
					fieldLabel : '角色改名为:',
					name : 'name',
					width : 400
				}, moduleGrid
			],
			buttons : [
				{
					text : '确定',
					handler : function ()
					{
						editForm();
					}
				},
				{
					text : '删除',
					handler : function ()
					{
						Ext.Msg.show(
						{
							title : "删除",
							msg : "是否要删除？这样做该角色所有用户将会被一并清空！",
							buttons : Ext.Msg.YESNO,
							fn : deleteForm,
							icon : Ext.MessageBox.QUESTION
						}
						);
					}
				}
			]
		}
		);

	var editWindow = Ext.create('Ext.window.Window',
		{
			title : '编辑角色',
			height : 600,
			width : 800,
			layout : 'fit',
			modal : true,
			closeAction : 'hide',
			items : [editRoleForm]
		}
		);

	var tmp = Ext.getCmp('addNewRoleForm');
	if (tmp != null)
		tmp.destroy();
	addNewRoleForm = Ext.create("Ext.form.FormPanel",
		{
			title : '添加一个新的角色',
			frame : false,
			defaultType : 'textfield',
			defaults :
			{
				labelWidth : 100,
				width : '100%',
				labelAlign : "right"
			},
			items : [
				{
					allowBlank : false,
					fieldLabel : '角色名称',
					name : 'name',
					width:400,
					emptyText : '输入名称'
				},newModuleGrid
			],
			buttons : [
				{
					text : '确定',
					handler : function ()
					{
						addForm();
					}
				}
			]
		}
		);

	var addWindow = Ext.create('Ext.window.Window',
		{
			title : '新增角色',
			height : 600,
			width : 800,
			layout : 'fit',
			modal : true,
			closeAction : 'hide',
			items : [addNewRoleForm]
		}
		);
}
);
